package com.punch.common.utils;

import java.math.BigDecimal;

/**
 *
 */
public class BigDecimalUtil {

    /**
     * BigDecimal 相加
     *
     * @param v1
     * @param v2
     * @return
     */
    public static BigDecimal plus(BigDecimal v1, BigDecimal v2) {
        return v1.add(v2).setScale(4, BigDecimal.ROUND_HALF_UP);
    }


    /**
     * BigDecimal 相减
     *

     * @return
     */
    public static BigDecimal sub(BigDecimal v1, BigDecimal v2) {
        return v1.subtract(v2).setScale(4, BigDecimal.ROUND_HALF_UP);
    }


    /**
     * BigDecimal 乘法(Integer)
     *

     */
    public static BigDecimal mul(BigDecimal v1, Integer v2) {
        BigDecimal val = new BigDecimal(v2);
        return v1.multiply(val).setScale(4, BigDecimal.ROUND_HALF_UP);
    }
    /**
     * BigDecimal 乘法(BigDecimal)
     *

     */
    public static BigDecimal mul(BigDecimal v1, BigDecimal v2) {
        return v2.multiply(v1).setScale(4, BigDecimal.ROUND_HALF_UP);
    }

    /**
     * BigDecimal 乘法(float)
     *
     * @param price
     * @param quantity
     * @return
     */
    public static BigDecimal mul(BigDecimal price, String quantity) {
        BigDecimal val = new BigDecimal(quantity);
        return price.multiply(val).setScale(4, BigDecimal.ROUND_HALF_UP);
    }

    /**
     * 把金额从分转成元
     *
     * @param fee 分金额
     * @return BigDecimal
     */
    public static BigDecimal getMoneyBigDecimal(BigDecimal fee) {
        BigDecimal divisor = new BigDecimal(100);
        return fee.divide(divisor, 2, BigDecimal.ROUND_HALF_UP);
    }

    /**
     * 把金额从分转成元
     *
     * @param fee 分金额
     * @return BigDecimal
     */
    public static BigDecimal getMoneyBigDecimal(Integer fee) {
        BigDecimal val = new BigDecimal(fee);
        BigDecimal divisor = new BigDecimal(100);
        return val.divide(divisor, 2, BigDecimal.ROUND_HALF_UP);
    }


    /**
     * 把金额从元转成分
     *
     * @param price 金额
     * @return int
     */
    public static Integer getMoneyFee(BigDecimal price) {
        BigDecimal val = new BigDecimal(100);
        BigDecimal fee = price.multiply(val).setScale(4, BigDecimal.ROUND_HALF_UP);
        return fee.intValue();
    }


    /**
     * 除法
     *
     * @param val1 被除数
     * @param val2 除数
     */
    public static BigDecimal div(String val1, String val2) {
        BigDecimal val = new BigDecimal(val1);
        BigDecimal divisor = new BigDecimal(val2);
        return val.divide(divisor, 2, BigDecimal.ROUND_HALF_UP);
    }
}
